このサイトは、只今WEB業界で活躍中のデザイナー、プログラマーの方々の情報を集めたweb統合情報サイトです。

Archives Details

人気急上昇!PHPフレームワーク「Laravel」を使ってみました。簡易会員サイト作成編

PHP

2014.09.24

この記事は最終更新日から1年以上が経過しています。

前回、こちらで

人気急上昇!PHPフレームワーク「Laravel」を使ってみました。 インストール 〜 起動まで。

インストールまで行ったので、今回は 基本的な使い方や「artisan(アーティザン)」コマンドの「migrate(マイグレート)」オプション周りや、簡易の会員サイトの作成を行なって行きたいと思います。

インストール

何はともあれインストールから振り返ってみましょう。

基本はこちらの

Laravelクイックスタート

http://laravel4.kore1server.com/docs/quick

でまとまっていますので、こちらを元に進めていきます。

LaravelフレームワークはComposerをインストールと依存パッケージの管理に活用しています。

とのことなので、Composerをインストールした環境で、以下のコマンドでサクっとプロジェクトの作成が行えます。

composer create-project laravel/laravel=4.1.* your-project-name --prefer-dist

your-project-name のところは任意の名前で。

パーミッション

app/storage 以下はサーバーが書き込めるように権限変更が必要です。

Laravelのサーバー

PHP5.4以上を使用しているのであれば、Artisan ‘serve’コマンドで、開発サーバーを使用することが可能なのです!

php artisan serve
ディレクトリ

主に、appディレクトリーの

views

controllers

models

を扱う機会が多いでしょう。

設定ファイルは app/config 以下のファイルとなっております。

ルーティング

ルーティングの設定は app/routes.php となっております。

では、例に習って以下を追加。

app/routes.php

Route::get('users', function() {return 'Users!';});

/usersへアクセスすると、Users!と表示。Yeah!

コントローラークラスの指定も以下の様な記述で行えます。

Route::get('users', 'UserController@getIndex');

ビュー

ビューは app/viewsディレクトリー 以下のファイルとなります。

また、例に習って、layout.blade.phpusers.blade.phpを修正。

app/views/layout.blade.php

 

<html>
    <body>
        <h1>Laravelクイックスタート</h1>
        @yield('content')
    </body>
</html>

 

app/views/user.blade.php

 

@extends('layout')@section('content')Users!@stop
Bladeテンプレートを作成。

Bladeテンプレートファイル「任意のファイル名.blade.php 」となっております。

表示させたいViewの記述は、View::make(‘ファイル名’);

となっておりますので

app/routes.php

Route::get('users', function() {return View::make('users');});

と、ルーティングの設定に追加。

とここまで出来たらデータベースの方の設定へと。

マイグレーション

「artisan(アーティザン)」コマンドの「migrate(マイグレート)」オプションを使うことによって、

データベースをサクっと作成することが可能となっております。

データベース接続の設定ファイルは「app/config/database.php」となっております。

'default' => 'mysql',

を使用するデータベースを記述します。(mysqlはデフォルト)

app/config/database.php

〜 省略 〜
'mysql' => array(
    'driver' => 'mysql',
    'host' => 'localhost',
    'database' => 'laravel',
    'username' => 'root',
    'password' => 'password',
    'charset' => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix' => '',
),
〜 省略 〜

こちらでデータベース接続設定を行います。

上記の場合だと、laravelのデータベースにroot権限のパスワードは「password」となります。

ターミナルを起動し、プロジェクトのルートディレクトリー(artisanがあるディレクトリ)で以下のコマンドを入力

php artisan migrate:make create_users_table

app/database/migrations 以下に「2014_◯◯_◯◯_create_users_table.php」の様なファイルが作成されたかと思います。

そのファイルを開くと、upとdownのメソッドが記述されているかと思います。

2014_◯◯_◯◯_create_users_table.php

public function up() { 
    Schema::create('users', function($table) {
        $table->increments('id');
        $table->string('email')->unique();
        $table->string('name');
        $table->timestamps();
    });
}

public function down() {
    Schema::drop('users');
}

それぞれ、upメソッドにはデータベーステーブルに対する変更を記述downメソッドにはその変更をもとに戻す指定(ロールバック時に実行)を記述します。

これらを記述しターミナルでmigrateコマンド実行。

php artisan migrate

あっと言う間に、

Eloquent ORM

これまた便利な機能の一つで、関連するデーターベーステーブルにクエリーし、モデル名の複数形を使用することが可能となっております。

モデルとなるファイルは「app/models」以下に格納します。

phpmyadminを使って、データを挿入します。

データを挿入したら「app/routes.php」を編集。

app/routes.php

Route::get('users', function() {
    $users = User::all();return View::make('users')->with('users', $users);
});

User::all(); で全レコードを取得

withメソッドを使用しビューに渡す。withメソッドにはキーと値を渡し、ビューで使用できる変数を指定。

データ表示

ビューを編集します。「app/views/user.blade.php」を編集。

app/views/user.blade.php

@extends('layout')
@section('content')
@foreach($users as $user)
    <p>{{$user->id}} {{ $user->name }}</p>
    <p>{{ $user->email }}</p>
@endforeach
@stop

修正したらブラウザで /usersにアクセス。

このように表示すれば成功!

超簡易会員サイト作成

とここまで、基本的な使用方法を書いてきました。

では早速、簡易会員サイトを作成していきましょう。

こちらの「Laravelでのログイン処理のかきかた」がサクっと作成する方法が書かれていましたので、

実際にやってみましょう。

http://blog.e2info.com/2013/07/04/phplaravel_auth/

ホンのちょっと修正して、情報を入力してログインするページとプロフィールページを作成していきます。

まず、

composer create-project laravel/laravel=4.1.* laravel_members --prefer-dist

でプロジェクトの作成。(プロジェクト名はlaravel_members)

データベース作成

reate database laravel_member

app/config/database.php でデータベースの接続設定を行います。

設定が完了しましたら、 続いてルーティングの設定を。

app/routes.php

Route::when('', 'auth');

Route::get('/login', function() {
    return View::make('user/login');
});

Route::post('/login', array('before' => 'csrf', function() {
    $inputs = Input::only(array('name', 'password'));
    if ( Auth::attempt($inputs) ) {
        return View::make("user/profile");
    } else {
        return Redirect::back()->withInput();
    }
}));

を追加。

Route::when(”, ‘auth’);で全てのベージで認証の有効にしていますが、部分的にも可能となっております。

例:

Route::when(‘admin/*’, ‘admin’);

続いてViewの作成。ログインページを作って行きます。

ログインページ

user/login.blade.php

@if ( Auth::guest() )
    未ログイン
@else
    ログイン済みです
@endif

{{ Form::open() }}
    {{ Form::label("name", "Username") }}
    {{ Form::text("name", Input::old('name', ''), [ "placeholder" => "web帳" ]) }}
    {{ Form::label("password", "Password") }}
    {{ Form::password("password", [ "placeholder" => "password" ]) }}
    @if ($error = $errors->first("password"))
        <div class="error"> {{ $error }} </div>
    @endif {{ Form::submit("login") }}
{{ Form::close() }}
プロフィールページ

user/profile.blade.php

<h2>いらっしゃい、{{ Auth::user()->name }}さん</h2>
<p>プロファイルページヘようこそ。</p>

Bladeテンプレートに関してはいつかまとめられたらと思いつつ。。。
ここまでで一通り完了しましたので、テーブルを強引に作成する記述をルーティングに含めます。

app/routes.php

Route::get('/create-users-table', function() {
	Schema::create('users', function($table) {
		$table->increments('id');
		$table->string('name', 100);
		$table->string('password', 100);
		$table->timestamps();
	});
	
	$user = new User;
	$user->name = 'user';
	$user->password = Hash::make('password');
	$user->save();
		
	return 'テーブル作成';
});

ブラウザで /create-users-table をアクセスすると、サクっとテーブルが作成されちゃいます!  

ログアウトの処理も追加しておきます。

app/routes.php

Route::get('/logout', function() {
    Auth::logout();
    return Redirect::to('/login');
});

これで、超簡易ログインテスト完成!

/login をアクセスし、 usernameに「user」passwordに「password」を入力し、submitを押すと

きちんと飛んだ。/logout をアクセスすると、ログアウトし再びログインページにリダイレクトされるかと思います。

これらのソースは以下のURLにあります。(ブランチ:feature/minimum)

GitHub : webcyou

https://github.com/webcyou/laravel_members/tree/feature/minimum

コントローラを使った記述

上記の作成方法は超手軽に作ったので、今度はLaravelっぽく、Controllerを使った記述を行なっていきます。

まず、routes.phpの精査を行なって行きます。

app/routes.php

Route::group(["before"=>"guest"],function() {

とグループ分けを行い、認証前のguest状態と認証後で振分けを行います。

Route::group(["before"=>"guest"],function() {
    Route::any("/login", [
        "as" => "user/login",
        "uses" => "UserController@loginAction"
    ]);
});

Route::group(["before"=>"auth"],function() {

    Route::any("/profile", [
        "as" => "user/profile",
        "uses" => "UserController@profileAction"
    ]);

    Route::any("/logout", [
        "as" => "/",
        "uses" => "UserController@logoutAction"
    ]);
});

“before”=>”guest”で認証前。”before”=>”auth”で認証後。

続いて、コントローラの作成を行います。

コントローラはcontrollers/ 以下に格納していきます。

app/controllers/UserController.php

<?php

class UserController extends Controller {

    public function loginAction() {
        if (Input::server("REQUEST_METHOD") == "POST") {
            $validator = Validator::make(Input::all(), [
                "name" => "required",
                "password" => "required"
            ]);
            if ($validator->passes()) {
                $credentials = [
                    "name" => Input::get("name"),
                    "password" => Input::get("password")
                ];
                if (Auth::attempt($credentials)) {
                    return Redirect::route("user/profile");
                }
            } else {
                $data["name"] = Input::get("name");
                return Redirect::route("user/login")->withInput($data);
            }
        }
        return View::make("user/login");
    }

    public function profileAction() {
        return View::make("user/profile");
    }
    
    public function logoutAction() {
        Auth::logout();
        return Redirect::to("/login");
    }
}

完成。

ログインページは同様。

usernameに「user」passwordに「password」を入力し、submitでログインしプロフィールページに行っているかと思いますが、

logoutを行うため、/logoutを叩こうとすると、どうも上手く行かず、

 

config/app.php

‘debug’ => false, を ‘debug’ => true

にすることによって、エラーログが表示されますので、変更したところ、

と怒られました。

どうやら、remember_token カラムが必要のようです。

こちらにも記載しているとおり、

http://laravel4.kore1server.com/docs/security

——————————————–

注意:とりかかる前に、usersテーブル(もしくはユーザーを管理するテーブル)に、nullを許し(nullable)、長さ100文字の文字列で、remember_tokenカラムが含まれていることを確認してください。このカラムは、アプリケーションで”Remember me”セッションのトークンを保存しておくために使用されるカラムです。

——————————————–

とのことですので、remember_tokenカラムを作成。

すると、logout処理も行えました。

これらのソースはこちらで確認出来ます。ブランチ:feature/controller)

GitHub : webcyou

https://github.com/webcyou/laravel_members/tree/feature/controller

次回は更に作り込めたら。

Comment

Related Article

php 7.4にアップデート

2023.12.24

Laravel 4 を PHP 7 環境へ移行したお話。

2018.06.10

PHP 簡易アクセスログ 出力

2016.04.29

Laravelを 別環境に移動したら画面が真っ白に。MacにComposer、php mcrypt 等をインストールしたお話。

2015.10.10

遅れましたが..あけましておめでとうございます!2015年は Laravelで画像処理。からということで。

2015.01.08

IDE phpstorm, IntelliJ IDEAの Database接続が便利すぎる件(Vagrant + IntelliJ IDEA でMySQL操作)

2014.11.29

Laravel4でもSmartyを使用したい!

2014.11.20

人気急上昇!PHPフレームワーク「Laravel」を使ってみました。簡易会員サイト作成編

2014.09.24

Laravel4 パーミッションエラー Vagrant パーミッションが変更しない件

2014.08.24

【CentOS6】 PHP5.3からPHP5.5にバージョンアップしました

2014.08.11

CATEGORY LIST

LATEST NEWS

M1 Macで、OpenGL GLUTを使ってコンパイルする

C

2024.04.27

Rust - Actix Web mongo ユーザー登録 JWT認証

Rust

2024.03.24

Rust - Actix Web JWT 認証認可 APIの作成

Rust

2024.02.25

Rust - Actix Web × JSON 静的ファイルをAPIで返却

Rust

2024.01.19

Rust - Actix Web × MongoDB環境をサクッと起動

Rust

2024.01.18

5分で学ぶ RustでWave Function Collapse (波動関数崩壊アルゴリズム)

Rust

2024.01.15

LLaMAモデル GGMLフォーマット(llama.cpp)をRustフレームワーク Leptosを用いて M1MacMiniでサクッと動かす。

Rust

2024.01.11

2024年 狙っているモバイルノートPC

tool

2024.01.07

MacOS XcodeにSDL2を追加

tool

2023.12.26

php 7.4にアップデート

PHP

2023.12.24

5分で覚える Flutter Flameで作る Wave Function Collapse - 波動関数崩壊アルゴリズム

AI・Bot・algorithm

2023.12.20

Flutter - Flameでゲーム作成 (キャラクターの移動)

Flutter

2023.07.23

RANKING

Follow

SPONSOR

現在、掲載募集中です。



Links

About Us

WEBデザイナーの、WEBデザイナーによる、WEBデザイナーの為のサイト。「みんなで書こう!」と仲間を募ってみたが、結局書くのは自分だけとなってしまいました。日々のメモを綴っていきます。

Entry Profile

Graphical FrontEnd Engineer
- Daisuke Takayama

MAD CITY 北九州市で生まれ育つ。20代はバンド活動に明け暮れ、ふと「webデザイナーになりたい。」と思い、デジタルハリウッド福岡校入学。卒業後、数々の賞を受賞、web業界をざわつかせる。
現在、主に、ゲーム制作中心に港区六本木界隈で活動中。

FOLLOW US